/**
 * @description 信息
 * @author 宫彦胜
 */

 const jwt = require("jsonwebtoken");
 const util = require("util");
 // 将回调方式的工具转换成promise 方式的
const verify = util.promisify(jwt.verify);
const { JWT_SECRET_KEY } = require('../conf/secretKeys')

const { getUserInfo, createUser } = require('../service/user') 
const doCrypto = require('../util/cryp')

const { registerUserNameNotExistInfo, registerUserNameExistInfo, registerFialInfo, loginFailInfo } = require('../model/ErrorInfo')
const { SuccessModel, ErrorModel } = require('../model/ResModel')


/**
 * @description 通过用户名查询是否存在
 */
 async function isExist(userName){
  // 调用 service 进行处理
  const userInfo = await getUserInfo(userName)
  if(userInfo){
    return new SuccessModel(userInfo)
  }else{
    return new ErrorModel(registerUserNameNotExistInfo)
  }
}

/**
 * @description 注册用户信息
 */
 async function register({ userName, password, gender }){
  //通过用户名查看是否已经存在
  const userInfo = await getUserInfo(userName)
  if(userInfo){
    // 如果存在就返回一个错误的失败信息
    return new ErrorModel(registerUserNameExistInfo)
  }
  try{
    await createUser({ 
      userName, 
      password: doCrypto(password), 
      gender 
    })
    return new SuccessModel()
  }catch(err){
    console.error(err)
    return new ErrorModel(registerFialInfo)
  }
}

/**
 * 
 * @param {object} ctx ctx 对象
 * @param {string} userName 用户名
 * @param {string} password 密码
 */
 async function login(userName,password){
  
  const userInfo = await getUserInfo(userName,doCrypto(password))
  if(!userInfo){
    return new ErrorModel(loginFailInfo)
  }
  console.log(userInfo.dataValues)
  const token = jwt.sign(userInfo.dataValues,JWT_SECRET_KEY,{ expiresIn:"12h"})
  return new SuccessModel({ token })
  
}


module.exports = {
  login,
  register,
  isExist

}


